from datetime import datetime
from app import db

class Recipe(db.Model):
    __tablename__ = 'recipes'  # 食谱表

    recipe_id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 食谱ID，主键
    name = db.Column(db.String(255), nullable=False)  # 食谱名称
    description = db.Column(db.Text)  # 食谱描述
    created_at = db.Column(db.DateTime, default=datetime.utcnow)  # 创建时间
    updated_at = db.Column(db.DateTime, onupdate=datetime.utcnow)  # 更新时间
    user_id = db.Column(db.String(255), db.ForeignKey('user_info.user_id'), nullable=False)  # 外键，关联用户表
    is_generated = db.Column(db.Boolean, default=False)  # 新增字段，标识是否是生成的食谱
    calories = db.Column(db.Float) # 总热量
    carbohydrate = db.Column(db.Float) # 总碳水克数
    protein = db.Column(db.Float) # 总蛋白质克数
    fat = db.Column(db.Float) # 总脂肪克数

    # 设置与 UserInfo 模型的关系
    user = db.relationship('UserInfo', backref='recipes')  # 反向关系：可以通过 `user.recipes` 获取该用户的所有食谱
    # 多对多的关系
    # foods = db.relationship('Food', secondary='recipe_food', back_populates='recipes')

    def __repr__(self):
        return f'<Recipe {self.name}>'

    def to_dict(self):
        return {
            'recipe_id': self.recipe_id,
            'name': self.name,
            'description': self.description,
            'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
            'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S') if self.updated_at else None,
            'user_id': self.user_id,
            'user': self.user.to_dict() if self.user else None,  # 如果有用户信息，转换为字典
            'meals': [meal.to_dict() for meal in self.meals]  # 转换关联的 `meals`
        }